#define _CRT_SECURE_NO_WARNINGS 1

//#include<bits/stdc++.h>
//
//using namespace std;
//
//int main()
//{
//	long long l, q, b;
//	cin >> l >> q >> b;
//	if (l > q + b)
//		cout << "l" << endl;
//	else if(q>b+l)
//		cout << "q" << endl;
//	else if (b>l + q)
//		cout << "b" << endl;
//	else
//		cout << -1 << endl;
//
//	return 0;
//}
//
//
//
//#include<bits/stdc++.h>
//
//using namespace std;
//
//typedef long long ll;
//
//int main()
//{
//	int N, Q;
//	ll t;
//	cin >> N >> Q;
//
//	ll ret = 0;
//	for (int i = 1; i <= N; i++)
//	{
//		cin >> t;
//		ret += t;
//	}
//
//	while (Q--)
//	{
//		int l, r;
//		cin >> l >> r;
//
//		int k = r - l + 1;
//		if (k % 2 == 1)
//			ret += l+k/2;
//		else
//			ret -= (k / 2);
//	}
//
//	cout << ret << endl;
//
//
//	return 0;
//}

//4
//
//#include<bits/stdc++.h>
//
//using namespace std;
//
//typedef long long ll;
//
//
//int main()
//{
//	int T;
//	cin >> T;
//	while (T--)
//	{
//		int N , M;
//		cin >> N >> M;
//		vector<int> arr(N+1);
//		int maxv = 0;
//		int minv = 0x3f3f3f3f;
//		int flag = 0;
//		for (int i = 0; i < N; i++)
//		{
//			cin >> arr[i];
//			maxv = max(arr[i], maxv);
//			minv = min(arr[i], minv);
//		}
//
//		
//		if (M <= maxv && M >= minv)
//			cout << "YES" << endl;
//		else
//			cout << "NO" << endl;
//
//	}
//
//	return 0;
//}



//5


#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

//struct cmp
//{
//	bool operator()(pair<int, int> p1, pair<int, int> p2)
//	{
//		retun
//	}
//};

int main()
{
	int N;
	cin >> N;
	vector<pair<int, int>> arr(N);

	for (int i = 0; i < N; i++)
		cin >> arr[i].first;

	for (int i = 0; i < N; i++)
		cin >> arr[i].second;

	sort(arr.begin(), arr.end(), [&](pair<int, int> p1, pair<int, int> p2)
		{
			if (p1.first <= p1.second && p2.first <= p2.second)
			{
				return p1.first < p2.first;
			}
			else if (p1.first <= p1.second)
				return true;
			else if (p2.first <= p2.second)
				return false;
			else
				return p1.second > p2.second;
		}
		);

	int t_1 = 0;
	int t_2 = 0;

	for (auto [a, b] : arr)
	{
		t_1 += a;
		t_2 = max(t_2, t_1) + b;
	}

	cout << max(t_1, t_2) << endl;

	return 0;
}


//6


//#include<bits/stdc++.h>
//#include<unordered_map>
//
//using namespace std;
//
//typedef long long ll;
//
//int main()
//{
//	string s;
//	cin >> s;
//	ll cnt = 0;
//
//	unordered_map<string, bool> hash(false);
//
//	for (int i = 0; i <= s.size(); i++)
//	{
//		string t_begin = s.substr(0, i);
//		string t_end = s.substr(i, s.size()-i);
//
//		for (int i = 0; i < 10; i++)
//		{
//			char ch = '0' + i;
//			string t = t_begin + ch + t_end;
//			if (!hash[t])
//			{
//				hash[t] = true;
//				cnt++;
//			}
//		}
//	}
//
//	cout << cnt-1;
//
//
//	return 0;
//}